﻿using System;
using System.ComponentModel;
using Kaesoft.Hospedaje.Proxy.ParametrizacionReference;
using System.Collections.Generic;
using Kaesoft.Hospedaje.Entities;


namespace Kaesoft.Hospedaje.Proxy
{
    /// <summary>
    /// Proxy para el servicio de parametrizacion
    /// </summary>
    public class ProxyParametrizacion
    {
        #region Campos Privados
        private static ServicioParametrizacionClient _clientStatic;
        #endregion

        #region Constructores
        /// <summary>
        /// Crea una instancia del proxy
        /// </summary>
        static ProxyParametrizacion()
        {
            _clientStatic = new ServicioParametrizacionClient(EndpointNames.EndpointServicioParametrizacion);
            _clientStatic.Endpoint.Behaviors.Add(new CustomInspectorBehavior());
            WcfProxyInvoker.UsuarioLogged += (o, e) => RefrescarCredenciales();
            WcfProxyInvoker.GrabarCredenciales(_clientStatic.ClientCredentials);
        }

        /// <summary>
        /// Crea una instancia del proxy
        /// </summary>
        public ProxyParametrizacion()
        {
            WcfProxyInvoker.ParametrizacionProxy = this;
            //Set client credentials for DMZ
            WcfProxyInvoker.UsuarioLogged += (o, e) => WcfProxyInvoker.GrabarCredenciales(_clientStatic.ClientCredentials);
            WcfProxyInvoker.GrabarCredenciales(_clientStatic.ClientCredentials);
        }

        public static void RefrescarCredenciales()
        {
            _clientStatic = new ServicioParametrizacionClient(EndpointNames.EndpointServicioParametrizacion);
            _clientStatic.Endpoint.Behaviors.Add(new CustomInspectorBehavior());
            WcfProxyInvoker.GrabarCredenciales(_clientStatic.ClientCredentials);
        }
        #endregion

        #region Metodos Publicos
        public static void ObtenerCatalogosAsync(int tipoCatalogo, Action<ObtenerCatalogosCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerCatalogosAsync", tipoCatalogo, method);
        }

        public static void ObtenerCatalogoSummaryAsync(int tipoCatalogo, Action<ObtenerCatalogoSummaryCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerCatalogoSummaryAsync", tipoCatalogo, method);
        }

        public static void ObtenerCatalogoSummaryPorCriterioAsync(int tipoCatalogo, int tipoConsulta, string criterio, int indice, Action<ObtenerCatalogoSummaryPorCriterioCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerCatalogoSummaryPorCriterioAsync", tipoCatalogo, tipoConsulta, criterio, indice, method);
        }

        public static void ObtenerParametrosSistemaAsync(Action<ObtenerParametrosSistemaCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerParametrosSistemaAsync", method);
        }

        public static void GrabarParametroSistemaAsync(List<Parametro> parametros, Action<AsyncCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "GrabarParametroSistemaAsync", parametros, method);
        }

        public static void ObtenerTipoCatalogosAsync(Action<ObtenerTipoCatalogosCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerTipoCatalogosAsync", method);
        }

        public static void GrabarCatalogoAsync(List<Catalogo> catalogos, Action<AsyncCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "GrabarCatalogoAsync", catalogos, method);
        }

        public static void GrabarTipoCatalogoAsync(List<EstructuraCatalogo> tipos, Action<AsyncCompletedEventArgs> method)
        {
            WcfProxyInvoker.InvocarMetodo(_clientStatic, "GrabarTipoCatalogoAsync", tipos, method);
        }

        public static void ObtenerUsuariosAsync(Action<ObtenerUsuariosCompletedEventArgs> method)
         {
             WcfProxyInvoker.InvocarMetodo(_clientStatic, "ObtenerUsuariosAsync", method);
         }
        #endregion
    }
}